package controllers;

import java.util.List;

import models.Bateau;
import models.Carte;
import models.Coordonnee;
import models.Couleur;
import models.Modele_bateau;
import models.Ville;
import play.*;
import play.data.validation.MaxSize;
import play.data.validation.MinSize;
import play.data.validation.Required;
import play.mvc.*;

@CRUD.For(models.Ville.class)
@With(Secure.class)
public class AdminVille extends CRUD 
{
	// Page création
    public static void blank() 
    {
    	List<Carte> cartes = Carte.findAll();
    	render(cartes);
    }
    
	// Crée un nouveau bateau
    public static void enregistrer( @Required long carte_id,
    								@Required @MaxSize(50) @MinSize(5) String nom_ville,
    								@Required int x, @Required int y)  
    {
    	List<Carte> cartes = Carte.findAll();
    	
		if(validation.hasErrors())
		{
			render("AdminVille/blank.html", cartes, carte_id, nom_ville, x, y);
		}
		
		else
		{
			long coord_id = Coordonnee.getIdByCarteAndCoords(carte_id, x, y);
			if(coord_id == 0)
			{
				String message = "Les coordonnées spécifiées n'ont pas été trouvées";
				render("AdminVille/blank.html", cartes, carte_id, nom_ville, x, y, message);
			}
			else if (Ville.find("byCoordonnee_id", coord_id).first() != null)
			{
				String message = "Une ville se situe déjà à ces coordonnées";
				render("AdminVille/blank.html", cartes, carte_id, nom_ville, x, y, message);				
			}
			else
			{
				Coordonnee coord = Coordonnee.findById(coord_id);
				Ville ville = new Ville(nom_ville, coord).save();
				redirect("/admin/adminville");
			}
		}
    }

	// Edite une ville
    public static void edit(long id,
				    		@Required long carte_id,
							@Required @MaxSize(50) @MinSize(5) String nom_ville,
							@Required int x, @Required int y)  
    {
    	List<Carte> cartes = Carte.findAll();
    	Ville ville = Ville.findById(id);
    	
		if(validation.hasErrors())
		{
			render("AdminVille/blank.html", ville, cartes, carte_id, nom_ville, x, y);
		}
		
		else
		{
			long coord_id = Coordonnee.getIdByCarteAndCoords(carte_id, x, y);
			if(coord_id == 0)
			{
				String message = "Les coordonnées spécifiées n'ont pas été trouvées";
				render("AdminVille/blank.html", ville, cartes, carte_id, nom_ville, x, y, message);
			}
			else if (Ville.find("byCoordonnee_id", coord_id).first() != null &&
					 Ville.find("byCoordonnee_id", coord_id).first() != ville)
			{
				String message = "Une ville se situe déjà à ces coordonnées";
				render("AdminVille/blank.html", ville, cartes, carte_id, nom_ville, x, y, message);				
			}
			else
			{
				Coordonnee coord = Coordonnee.findById(coord_id);
				ville.coordonnee = coord;
				ville.nom_ville = nom_ville;
				ville.save();
				redirect("/admin/adminville");
			}
		}
    } 
    
    // Affiche la page d'édition
    public static void show(String id) 
    {
    	long _id = Long.parseLong(id);
    	List<Carte> cartes = Carte.findAll();
    	Ville ville = Ville.findById(_id);    	
        String nom_ville = ville.nom_ville;
        Coordonnee coord = ville.coordonnee;
        long carte_id = coord.carte.id;
        int x = coord.position_x;
        int y = coord.position_y;
        render(ville, cartes, carte_id, x, y, nom_ville);
    }     
}
